import asyncio

async  def request(url):
    print('正在请求的URL是',url)
    print('请求成功',url)
    return url

# async修饰的函数,调用之后返回的一个协程对象
c = request('www.baidu.com')

# 1.task的使用
# # 创建一个事件循环协程对象
# loop = asyncio.get_event_loop()
#
# # 将协程对象注册到loop中,然后启动loop
# loop.run_until_complete(c)

# 2.task的使用
# loop = asyncio.get_event_loop()
# # 基于loop创建了一个task任务对象
# task = loop.create_task(c)
# print(task)
# loop.run_until_complete(task)
# print(task)

# 3.future的使用
# loop = asyncio.get_event_loop()
# task = asyncio.ensure_future(c)
# print(task)
# loop.run_until_complete(task)
# print(task)

def call_func(task):
    # result返回的就是任务对象中封装的协程对象对应函数的返回值
    print(task.result())

# 4.绑定回调
loop = asyncio.get_event_loop()
task = asyncio.ensure_future(c)
# 将回调函数绑定到任务对象中
task.add_done_callback(call_func)
loop.run_until_complete(task)